package com.victor.modular.system.dao;

import com.victor.common.node.ZTreeNode;
import com.victor.common.persistence.model.Role;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 角色相关的dao
 *
 * @author jiabin.Zhao
 * @date 2017年2月12日 下午8:43:52
 */
public interface RoleDao {

    /**
     * 根据条件查询角色列表
     *
     * @return
     * @date 2017年2月12日 下午9:14:34
     */
    List<Map<String, Object>> selectRoles(@Param("name") String name);

    /**
     * 删除某个角色的所有权限
     *
     * @param roleId 角色id
     * @return
     * @date 2017年2月13日 下午7:57:51
     */
    int deleteRolesById(@Param("roleId") Integer roleId);

    /**
     * 获取角色列表树
     *
     * @return
     * @date 2017年2月18日 上午10:32:04
     */
    List<ZTreeNode> roleTreeList();

    /**
     * 获取角色列表树
     *
     * @return
     * @date 2017年2月18日 上午10:32:04
     */
    List<ZTreeNode> roleTreeListByRoleId(String[] roleId);

    /**
     * DROP FUNCTION `getChildRoleList`; CREATE FUNCTION `getChildRoleList`(roleId
     * INT) RETURNS char(255) BEGIN DECLARE str char(255) ; DECLARE cid char(255) ;
     *
     * SET str = ''; SET cid =cast(roleId as CHAR);
     *
     * WHILE cid is not null DO
     *
     * SET str= concat(str,',',cid); SELECT group_concat(id) INTO cid FROM role
     * where FIND_IN_SET(pid,cid)>0;
     *
     * END WHILE; RETURN str; END
     */
    /**
     * 根据角色id 获取 所有子角色
     *
     * @param roleId
     * @return
     */
    String getChildRoleList(@Param("roleId") Integer roleId);

    /**
     * CREATE FUNCTION `getParentRoleList` (roleId INT) RETURNS CHAR (255) BEGIN
     * DECLARE fid INT DEFAULT 1; DECLARE str CHAR (255) DEFAULT roleId; WHILE
     * roleId > 0 DO
     *
     * SET fid = ( SELECT pid FROM role WHERE roleId = id );
     *
     *
     * IF fid > 0 THEN
     *
     * SET str = concat(str, ',', fid);
     *
     *
     * SET roleId = fid;
     *
     *
     * ELSE
     *
     * SET roleId = fid;
     *
     *
     * END IF;
     *
     *
     * END WHILE;
     *
     * RETURN str; END
     */
    /**
     * 根据角色id 获取 所有父角色
     *
     * @param roleId
     * @return
     */
    String getParentRoleList(@Param("roleId") Integer roleId);

    /**
     * 根据角色id 获取 所有同级角色
     *
     * @param roleId
     * @return
     */
    List<Role> getSiblingsRoleList(@Param("roleId") Integer roleId);

    /**
     * 获取角色Id 根据tips
     *
     * @param userName
     * @return
     */
    Role getIdByTips(@Param("tips") String tips);
}
